#include "batteryStatusKey.h"
#include "stm8s_gpio.h"
#include "Sample_Thread.h"
#include "TimeOut.h"
#include "led_array_driver.h"
#include "string.h"
#include "mainThread.h"
#include "stm8s103F3P.h"

key_status prvKeyStatus;

int batteryStatusKey_init(void){
	GPIO_Init(BATTERYKEY_PORT, BATTERYKEY_PIN,GPIO_MODE_IN_PU_NO_IT);
	//SP_INIT(&prvKeyStatus.prvKey);
	
	memset(&prvKeyStatus,0,sizeof(prvKeyStatus));
	return 0;
}


int batteryStatusKey_DeInit(void){
	memset(&prvKeyStatus,0,sizeof(prvKeyStatus));
	GPIO_Init(BATTERYKEY_PORT, BATTERYKEY_PIN,GPIO_MODE_IN_PU_NO_IT);
	//SP_INIT(&prvKeyStatus.prvKey);
	
	//SP_RESTART(&prvKeyStatus.prvKey);
}






int batteryStatusKey_GetKeyStatus(void){

	switch(prvKeyStatus.key_status){
		case KeyPress:{
			if(GPIO_ReadInputPin(BATTERYKEY_PORT, BATTERYKEY_PIN) == 0){
				TimeOut_Record(&prvKeyStatus.timeout,KEY_ANTI_SHAKE_TIME);
				prvKeyStatus.key_status++;
			}
			break;
		}
		case PressDelay:{
			if((TimeOutDet_Check(&prvKeyStatus.timeout) == 1)){
				if(GPIO_ReadInputPin(BATTERYKEY_PORT, BATTERYKEY_PIN) == 0){
					//ledArray_Refresh(0X002, 11);
					prvKeyStatus.key_status++;
					send_event(POWER_KEY_PRESS_EVENT);
				}else{
					prvKeyStatus.key_status--;
				}
			}
			break;
		}
		case KeyRelease:{
			if(GPIO_ReadInputPin(BATTERYKEY_PORT, BATTERYKEY_PIN) > 0){
				TimeOut_Record(&prvKeyStatus.timeout,KEY_ANTI_SHAKE_TIME);
				prvKeyStatus.key_status++;
			}
			break;
		}
		case ReleaseDelay:{
			
			if((TimeOutDet_Check(&prvKeyStatus.timeout) == 1)){
				if(GPIO_ReadInputPin(BATTERYKEY_PORT, BATTERYKEY_PIN) > 0){
					//ledArray_Refresh(0X000, 11);
					prvKeyStatus.key_status = KeyPress;
					send_event(POWER_KEY_REL_EVENT);
				}else{
					prvKeyStatus.key_status--;
				}
			}
			break;
		}
		default:{
			break;
		}
	}

	#if 0
	SP_BEGIN(&prvKeyStatus.prvKey);
	//SP_WAIT_UNTIL(&prvKeyStatus.prvKey, (GPIO_ReadInputPin(BATTERYKEY_PORT, BATTERYKEY_PIN) == 0));
	
	SP_WAIT_UNTIL(&prvKeyStatus.prvKey, ((PD_IDR&0X08) == 0));
	//ledArray_Refresh(0X002, 11);
	
	GPIO_WriteHigh(L2_PORT, L2_PIN);
	TimeOut_Record(&prvKeyStatus.timeout,KEY_ANTI_SHAKE_TIME);
	SP_WAIT_UNTIL(&prvKeyStatus.prvKey, (TimeOutDet_Check(&prvKeyStatus.timeout) == 1));
	if(GPIO_ReadInputPin(BATTERYKEY_PORT, BATTERYKEY_PIN) == 0){
		send_event(POWER_KEY_PRESS_EVENT);
	}else{
		SP_RESTART(&prvKeyStatus.prvKey);
	}
	lable:
	SP_WAIT_UNTIL(&prvKeyStatus.prvKey, (GPIO_ReadInputPin(BATTERYKEY_PORT, BATTERYKEY_PIN) >0 ));
	TimeOut_Record(&prvKeyStatus.timeout,KEY_ANTI_SHAKE_TIME);
	SP_WAIT_UNTIL(&prvKeyStatus.prvKey, (TimeOutDet_Check(&prvKeyStatus.timeout) == 1));
	if(GPIO_ReadInputPin(BATTERYKEY_PORT, BATTERYKEY_PIN) > 0){
		//ledArray_Refresh(0x000,11);
		
		GPIO_WriteLow(L2_PORT, L2_PIN);
		//ledArray_Refresh(0X000, 11);
		send_event(POWER_KEY_REL_EVENT);
		SP_RESTART(&prvKeyStatus.prvKey);
	}else{
		goto lable;
	}
	SP_END(&prvKeyStatus.prvKey);
	#endif

	
	
}

